package com.py.framework.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.py.framework.entity.RoleEntity;

/**
 * 角色管理Dao
 * @author Leegern
 * @date   2018年4月26日
 */
public interface RoleDao {
	
	/**
	 * 分页查询角色列表
	 * @param params
	 * @return
	 */
	List<RoleEntity> queryRolesForPage(Map<String, Object> params);
	
	/**
	 * 获取所有角色信息
	 * @return
	 */
	List<RoleEntity> getAllRoles();
	
	/**
	 * 根据角色名称查询数据
	 * @param roleId   角色Id
	 * @param roleName 角色名称
	 * @return
	 */
	List<RoleEntity> getRolesByName(@Param("roleId")long roleId, @Param("roleName")String roleName);
	
	/**
	 * 根据角色Id查询角色信息
	 * @param id 角色Id
	 * @return
	 */
	RoleEntity findOneRole(@Param("id") long id);
	
	/**
	 * 添加角色信息
	 * @param entity 角色实体
	 * @return
	 */
	int addRoleInfo(RoleEntity entity);
	
	/**
	 * 添加角色用户信息集合
	 * @param datas 数据集合
	 * @return
	 */
	int addRoleUserRelate(List<RoleEntity> datas);
	
	/**
	 * 删除角色用户信息
	 * @param roleId 角色Id
	 * @param userId 用户Id
	 * @return
	 */
	int delRoleUserRelate(Map<String, Object> params);
	
	/**
	 * 添加角色菜单关联数据集合
	 * @param datas 数据集合
	 * @return
	 */
	int addRoleMenuRelate(List<RoleEntity> datas);
	
	/**
	 * 删除角色菜单信息
	 * @param roleId 角色Id
	 * @param menuId 菜单Id
	 * @return
	 */
	int delRoleMenuRelate(Map<String, Object> params);
	
	/**
	 * 添加角色部门关联数据集合
	 * @param datas 数据集合
	 * @return
	 */
	int addRoleOfficeRelate(List<RoleEntity> datas);
	
	/**
	 * 删除角色部门信息
	 * @param roleId   角色Id
	 * @param officeId 部门Id
	 * @return
	 */
	int delRoleOfficeRelate(Map<String, Object> params);
	
	/**
	 * 修改角色信息
	 * @param entity 角色实体
	 * @return
	 */
	int updateRoleInfo(RoleEntity entity);
	
	/**
	 * 批量删除角色
	 * @param ids 角色Id集合
	 * @return
	 */
	int batchDelRoles(Map<String, Object> params);
	
	/**
	 * 获取角色用户关联数据
	 * @param roleId 角色Id
	 * @return
	 */
	List<RoleEntity> getRoleUserRelate(@Param("roleId") long roleId);
	
	/**
	 * 获取角色菜单关联数据
	 * @param roleId 角色Id
	 * @return
	 */
	List<RoleEntity> getRoleMenuRelate(@Param("roleId") long roleId);
	
	/**
	 * 获取角色部门关联数据
	 * @param roleId 角色Id
	 * @return
	 */
	List<RoleEntity> getRoleOfficeRelate(@Param("roleId") long roleId);
	
	/**
	 * 根据用户Id获取角色用户关联数据
	 * @param userId 用户Id
	 * @return
	 */
	List<RoleEntity> getRolesByUserId(@Param("userId") long userId);
}